package JDBC;

import Entidades.EstadoRepublica;
import Entidades.MarcaAuto;
import Entidades.ModeloAuto;
import Entidades.PrecioSeguro;
import Entidades.TipoSeguro;
import FabricaConexiones.*;
import catalogo.CatalogoHistorico;
import catalogo.CatalogoSiniestro;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Seleccionar {

    private Connection conexion = null;
    private Statement stm = null;
    private ResultSet rs = null;
    private String[] datosCliente = new String[8];
    private List<ArrayList> lista1 = new ArrayList();

    public Seleccionar() {
    }

    public void obtenerDatosUsuario(String nombre_cl) {
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM CLIENTE WHERE NOMBRE='" + nombre_cl.toUpperCase() + "'");
            while (rs.next()) {
                datosCliente[0] = rs.getString("CLIENTE_ID");
                datosCliente[1] = rs.getString("NOMBRE");
                datosCliente[2] = rs.getString("APELLIDO_PATERNO");
                datosCliente[3] = rs.getString("APELLIDO_MATERNO");
                datosCliente[4] = rs.getString(5);
                datosCliente[5] = rs.getString(6);
                datosCliente[6] = rs.getString(7);
                datosCliente[7] = rs.getString(8);
            }
        } catch (Exception se) {
            System.out.println("Error!! " + se.getMessage());
        } finally {
            try {
                conexion.close();

                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }

    }
    
public long obtenerClienteId(String nombre_cl, String ap_p_cl, String ap_m_cl, long tc_id) {
    long clienteId=0;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM CLIENTE WHERE NOMBRE='" + nombre_cl.toUpperCase() + "' AND APELLIDO_PATERNO='" + ap_p_cl.toUpperCase() + "' AND APELLIDO_MATERNO = '"+ap_m_cl.toUpperCase()+"' AND TARJETA_CREDITO_ID="+tc_id);
            while (rs.next()) {
                clienteId = rs.getLong(1);
            }
        } catch (Exception se) {
            System.out.println("Error!! " + se.getMessage());
        } finally {
            try {
                conexion.close();

                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
            return clienteId;
    }
    
    public String[] getDatosClientes() {
        return datosCliente;
    }

    /**
     *
     */
    public List<MarcaAuto> obtenMarcas() {
        List<MarcaAuto> marcasBd = new ArrayList();
        MarcaAuto ma;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM MARCA_AUTO");
            while (rs.next()) {
                ma = new MarcaAuto();               //se crea el objeto para mantener los campos
                //vacios y para ahorrar memoria
                ma.setMarcaAutoId(Long.parseLong(rs.getString("MARCA_AUTO_ID")));
                ma.setClave(rs.getString("CLAVE"));
                ma.setDescripcion(rs.getString("DESCRIPCION"));
                marcasBd.add(ma);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();

                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return marcasBd;
    }

    public List<ModeloAuto> obtenModelos() {
        List<ModeloAuto> modelosBd = new ArrayList();
        ModeloAuto ma;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM MODELO_AUTO");
            while (rs.next()) {
                ma = new ModeloAuto(rs.getLong(1), rs.getNString(2), rs.getString(3), rs.getLong(4));
                modelosBd.add(ma);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();

                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return modelosBd;
    }

    public List<ModeloAuto> obtenModelos(long marcaAutoId) {
        List<ModeloAuto> modelosBd = new ArrayList();
        ModeloAuto ma;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM MODELO_AUTO WHERE MARCA_AUTO_ID=" + marcaAutoId);
            while (rs.next()) {
                ma = new ModeloAuto(rs.getLong(1), rs.getNString(2), rs.getString(3), rs.getLong(4));
                modelosBd.add(ma);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();

                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return modelosBd;
    }

    /*@return retornara una lista de los estados de la BD. CLAVE e ID para obtenerlos de la base*/
    public List<EstadoRepublica> obtenEdosRep() {
        List<EstadoRepublica> edosBd = new ArrayList();
        EstadoRepublica er;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM ESTADO_REPUBLICA");
            while (rs.next()) {
                er = new EstadoRepublica(rs.getLong(1), rs.getNString(2), rs.getString(3));
                edosBd.add(er);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return edosBd;
    }

    public List<TipoSeguro> obtenTiposSeguro() {
        List<TipoSeguro> tipoSegBd = new ArrayList();
        TipoSeguro ts;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM TIPO_SEGURO");
            while (rs.next()) {
                ts = new TipoSeguro(rs.getLong(1), rs.getNString(2), rs.getString(3));
                tipoSegBd.add(ts);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }

        return tipoSegBd;

    }

    public List<PrecioSeguro> obtenPreciosSeguro() {
        List<PrecioSeguro> precioSeguroBd = new ArrayList();
        PrecioSeguro ps;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT * FROM PRECIO_SEGURO");
            while (rs.next()) {
                ps = new PrecioSeguro(rs.getLong(1), rs.getInt(2), rs.getInt(3), rs.getInt(4), rs.getInt(5), rs.getDouble(6), rs.getLong(7), rs.getLong(8), rs.getLong(9));
                precioSeguroBd.add(ps);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return precioSeguroBd;
    }

    public List<CatalogoSiniestro> repo_siniestro(String tipo_siniestro) {
        List<CatalogoSiniestro> cs = new ArrayList();
        CatalogoSiniestro cats;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            if (tipo_siniestro.equals("siniestro_material")) {
                rs = stm.executeQuery("select s.siniestro_id,s.fecha_siniestro,s.descripcion_danio,s.direccion,es.clave_siniestro,sm.descripcion from siniestro s join estado_siniestro es on es.estado_siniestro_id=s.estado_siniestro_id join " + tipo_siniestro + " sm on sm.siniestro_id=s.siniestro_id");
                while (rs.next()) {
                    cats = new CatalogoSiniestro(rs.getLong(1), rs.getDate(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6));
                    cs.add(cats);
                }
            } else if (tipo_siniestro.equals("siniestro_social")) {
                rs = stm.executeQuery("select s.siniestro_id,s.fecha_siniestro,s.descripcion_danio,s.direccion,es.clave_siniestro,sm.nombre_hospital from siniestro s join estado_siniestro es on es.estado_siniestro_id=s.estado_siniestro_id join " + tipo_siniestro + " sm on sm.siniestro_id=s.siniestro_id");
                while (rs.next()) {
                    cats = new CatalogoSiniestro(rs.getDate(2), rs.getString(3), rs.getLong(1), rs.getString(4), rs.getString(5), rs.getString(6));
                    cs.add(cats);
                }
            } else if (tipo_siniestro.equals("siniestro_colision")) {
                rs = stm.executeQuery("select s.siniestro_id,s.fecha_siniestro,s.descripcion_danio,s.direccion,es.clave_siniestro,sm.numero_reporte_vial from siniestro s join estado_siniestro es on es.estado_siniestro_id=s.estado_siniestro_id join " + tipo_siniestro + " sm on sm.siniestro_id=s.siniestro_id");
                while (rs.next()) {
                    cats = new CatalogoSiniestro(rs.getDate(2), rs.getLong(1), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6));
                    cs.add(cats);
                }
            }

        } catch (Exception se) {
            System.out.println("Error!! " + se.getMessage());
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return cs;
    }


    public long obtenTarjetaCreditoId(String num_tc, String mesV, String anioV, String numSeg) {
        long numTarjeta = 0;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT TARJETA_CREDITO_ID FROM TARJETA_CREDITO WHERE NUMERO_TARJETA=" + num_tc + " AND MES_VIGENCIA=" + mesV + " AND ANIO_VIGENCIA=" + anioV + " AND NUMERO_SEGURIDAD=" + numSeg);
            while (rs.next()) {
                numTarjeta = rs.getLong(1);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return numTarjeta;
    }

    public long obtenEstadoRepId(String clave) {
        long edo_id = 0;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT ESTADO_REPUBLICA_ID FROM ESTADO_REPUBLICA WHERE CLAVE=" + clave.toUpperCase());
            while (rs.next()) {
                edo_id = rs.getLong(1);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return edo_id;
    }
    
    public long obtenCostoSeguro(long precioSeguroId){
        long costoBd=0;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("SELECT COSTO_SEGURO FROM PRECIO_SEGURO WHERE PRECIO_SEGURO_ID="+precioSeguroId);
            while (rs.next()) {
                costoBd = rs.getLong(1);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        
        return costoBd;
    }
    

public List<CatalogoHistorico> consultaHisto(String id_histo_sini)
    {
        List<CatalogoHistorico> ch=new ArrayList();
        CatalogoHistorico cath;
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            rs = stm.executeQuery("select es.clave_siniestro,h.fecha_estado,s.descripcion_danio,s.siniestro_id from historico_estado_siniestro h join estado_siniestro es on es.estado_siniestro_id=h.estado_siniestro_id join siniestro s on s.siniestro_id=h.siniestro_id where s.siniestro_id="+id_histo_sini);
            while (rs.next()) {
               cath=new CatalogoHistorico(rs.getString(1),rs.getDate(2),rs.getString(3),rs.getLong(4));
               ch.add(cath);
            }
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        return ch;
    }
    
    public int updateSini(String idSin,String estado_sin)
    {
        try {
            conexion = Conexion.obtenerConexion();
            stm = conexion.createStatement();
            int estado=stm.executeUpdate("update siniestro set estado_siniestro_id="+estado_sin+",fecha_estado=TO_DATE(sysdate,'DD/MM/YYYY HH24/MI/SS') where siniestro_id="+idSin);
            if(estado==1)
            {
                return 1;
            }   
        } catch (Exception e) {
        } finally {
            try {
                conexion.close();
                stm.close();
            } catch (SQLException ex) {
                System.out.println("No se cerro correctamente la conexion ");
            }
        }
        
        return 0;
    }


    public static void main(String[] args) {
        Seleccionar selec = new Seleccionar();
        selec.obtenerDatosUsuario("MARIO");
        String[] datosObt = selec.getDatosClientes();
        for (int i = 0; i < datosObt.length; i++) {
            System.out.println("Dato[" + i + "]: " + datosObt[i]);
        }
        
    }
}
